package models

import (
	"gorm.io/gorm"
)

// AuthRule 对应数据库表 auth_rule
type AuthRule struct {
	gorm.Model
	ID        uint   `gorm:"primaryKey;autoIncrement;comment:主键，自增ID"`
	Name      string `gorm:"unique;not null;comment:规则唯一标识"`
	Title     string `gorm:"not null;comment:规则名称"`
	URL       string `gorm:"comment:规则URL"`
	URLParam  string `gorm:"comment:路由参数"`
	Icon      string `gorm:"comment:图标"`
	Type      uint8  `gorm:"default:0;comment:类型，0目录，1菜单，2页面，3按钮元素，4接口"`
	APIMethod uint8  `gorm:"default:0;comment:接口类型，0无，1get，2post，3delete，4put"`
	Rank      uint   `gorm:"default:0;comment:排序，数值越大权重越高"`
	ParentID  uint   `gorm:"default:0;comment:父级ID"`
	AppID     int    `gorm:"default:0;comment:数据归属"`
	Status    uint8  `gorm:"default:1;comment:状态标识，1禁用，2正常"`
	CreatedAt int64  `gorm:"autoCreateTime;comment:创建时间戳"` // 修改为 int64 类型
	UpdatedAt int64  `gorm:"autoUpdateTime;comment:更新时间戳"` // 修改为 int64 类型
}

type AuthRuleList struct {
	ID        uint            `json:"id"`
	Name      string          `json:"name"`
	Title     string          `json:"title"`
	URL       string          `json:"url"`
	URLParam  string          `json:"url_param"`
	Icon      string          `json:"icon"`
	Type      uint8           `json:"type"`
	APIMethod uint8           `json:"api_method"`
	Rank      uint            `json:"rank"`
	ParentID  uint            `json:"parent_id"`
	AppID     int             `json:"app_id"`
	Status    uint8           `json:"status"`
	CreatedAt string          `json:"created_at"`
	UpdatedAt string          `json:"updated_at"`
	Children  []*AuthRuleList `json:"children,omitempty"`
}

/*
*

	value: string | number;
	label: string;
	children?: OptionType[];
*/
type AuthRuleOptions struct {
	Value    uint               `json:"value"`
	Label    string             `json:"label"`
	ParentID uint               `json:"parent_id"`
	Children []*AuthRuleOptions `json:"children,omitempty"`
}
type AuthRuleCreate struct {
	Name      string `json:"name"`
	Title     string `json:"title"`
	URL       string `json:"url"`
	URLParam  string `json:"url_param"`
	Icon      string `json:"icon"`
	Type      uint8  `json:"type"`
	APIMethod uint8  `json:"api_method"`
	Rank      uint   `json:"rank"`
	ParentID  uint   `json:"parent_id"`
	AppID     int    `json:"app_id"`
	Status    uint8  `json:"status"`
}

type AuthRuleUpdate struct {
	ID        uint   `json:"id"`
	Name      string `json:"name"`
	Title     string `json:"title"`
	URL       string `json:"url"`
	URLParam  string `json:"url_param"`
	Icon      string `json:"icon"`
	Type      uint8  `json:"type"`
	APIMethod uint8  `json:"api_method"`
	Rank      uint   `json:"rank"`
	ParentID  uint   `json:"parent_id"`
	AppID     int    `json:"app_id"`
	Status    uint8  `json:"status"`
}

// AuthRuleData 对应数据库表 auth_rule
type AuthRuleData struct {
	ID        uint   `json:"id"`
	Name      string `json:"name"`
	Title     string `json:"title"`
	URL       string `json:"url"`
	URLParam  string `json:"url_param"`
	Icon      string `json:"icon"`
	Type      uint8  `json:"type"`
	APIMethod uint8  `json:"api_method"`
	Rank      uint   `json:"rank"`
	ParentID  uint   `json:"parent_id"`
}

type AuthRuleMeta struct {
	Title      string `json:"title"`
	Icon       string `json:"icon"`
	Hidden     bool   `json:"hidden"`
	AlwaysShow bool   `json:"alwaysShow"`
	Params     string `json:"params"`
	KeepAlive  bool   `json:"keepAlive"`
}

// AuthRuleMenus 对应数据库表 auth_rule
type AuthRuleMenus struct {
	ID        uint             `json:"id"`
	Name      string           `json:"name"`
	Component string           `json:"component"`
	Path      string           `json:"path"`
	Meta      AuthRuleMeta     `json:"meta"`
	Rank      uint             `json:"rank"`
	ParentID  uint             `json:"parent_id"`
	Children  []*AuthRuleMenus `json:"children,omitempty"`
}
type AuthRuleMenusName struct {
	ID       uint   `json:"id"`
	ParentID uint   `json:"parent_id"`
	Title    string `json:"title"`
}

// TableName 设置表名为 auth_rule
func (AuthRule) TableName() string {
	return "auth_rule"
}
